package com.tbit.uqbike.service.business;

import com.tbit.uqbike.object.pojo.RideFeeLog;
import com.tbit.uqbike.object.pojo.dto.RideFeeLogDownloadDTO;
import com.tbit.uqbike.object.pojo.dto.RideFeeLogStatisticsDTO;
import com.tbit.uqbike.object.pojo.vo.*;
import com.tbit.uqbike.object.value.LoginInfo;
import com.tbit.common.entity.view.PageResult;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 分账日志接口
 *
 * @Author:BUGTian
 * @DATE: 2022/5/26
 */
public interface SubAccountLogService {
    /**
     * 分页查询分账明细
     *
     * @param loginInfo   当前登录账户
     * @param page        当前页码
     * @param size        每页显示的行
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param userNO      adaPay商户下的用户id
     * @param buyOrderNO  订单编号
     * @return
     */
    PageResult<SubAccountLogVO> querySubAccountLogPage(LoginInfo loginInfo, Integer page, Integer size, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO, String buyOrderNO,String confirmId,String type);

    /**
     * 分页查询分账统计总览
     *
     * @param loginInfo   当前登录账户
     * @param page        当前页码
     * @param size        每页显示的行
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param userNO      adaPay商户下的用户id
     * @return
     */
    PageResult<SubAccountLogOverviewVO> querySubAccountLogOverviewPage(LoginInfo loginInfo, Integer page, Integer size, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO);

    /**
     * 分页查询分账统计总览-按天统计
     *
     * @param loginInfo   当前登录账户
     * @param page        当前页码
     * @param size        每页显示的行
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param userNO      adaPay商户下的用户id
     * @return
     */
    PageResult<SubAccountLogOverviewVO> querySubAccountLogOverviewPageByDay(LoginInfo loginInfo, Integer page, Integer size, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO);

    /**
     * 分页查询退款明细
     *
     * @param login       登录账户
     * @param page        当前页码
     * @param size        每页显示的行
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param userNO      adaPay商户下的用户id
     * @param buyOrderNO  订单编号
     * @return
     */
    PageResult<SubAccountUserRefundVO> querySubAccountUserRefund(LoginInfo login, Integer page, Integer size, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO, String buyOrderNO,String confirmId,String type);

    /**
     * 根据退款订单号查询退款详情
     *
     * @param brandId 品牌编号
     * @param paymentId 支付平台订单号
     * @return
     */
    List<SubAccountRefundLogVO> queryRefundDetail(Integer brandId, String paymentId);

    /**
     * 分页查询订单收费记录
     *
     * @param page      当前页码
     * @param size      每页显示的行
     * @param brandId   品牌id
     * @param accountId 区域id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param type      订单类型
     * @return
     */
    PageResult<RideFeeLog> queryRideFeeLogPage(Integer page, Integer size, Integer brandId, Integer accountId, Date startTime, Date endTime, Integer type);

    /**
     * 分页查询订单收费记录
     *
     * @param page          当前页码
     * @param size          每页显示的行
     * @param brandId       品牌id
     * @param accountIdList 区域id
     * @param startTime     开始时间
     * @param endTime       结束时间
     * @param type          订单类型
     * @return
     */
    PageResult<RideFeeLog> queryRideFeeLogPageStatistics(Integer page, Integer size, Integer brandId, List<Integer> accountIdList, Date startTime, Date endTime, Integer type);

    RideFeeLogStatisticsDTO selectRideFeeLogStatistics(Integer brandId, List<Integer> accountIdList, Date startTime, Date endTime, Integer type);

    String downloadRideFeeLog(RideFeeLogDownloadDTO downloadDTO);

    String getRideFeeLogLastTime(Integer brandId, List<Integer> accountIdList, Integer type);

    /**
     * 分页查询分账账户提现日志
     *
     * @param page             当前页码
     * @param size             每页显示的行
     * @param accountId        品牌id
     * @param startTime        开始时间
     * @param endTime          结束时间
     * @param accountUserPhone 操作人手机号
     * @param subAccountId     分账账户id
     * @param schedule         提现进度
     * @return
     */
    PageResult<SubAccountWithdrawalLogVO> queryWithdrawalLog(Integer page, Integer size, Integer accountId, Date startTime, Date endTime, String accountUserPhone, Integer subAccountId, Integer schedule, Integer type);

    /**
     * 订单收费记录汇总
     *
     * @param brandId   品牌id
     * @param accountId 区域id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param type      订单类型
     * @return
     */
    RideFeeLogTotalVO queryRideFeeLogTotal(Integer brandId, Integer accountId, Date startTime, Date endTime, Integer type);

    /**
     * 分账明细导出
     *
     * @param login
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param userNO      adaPay商户下的用户id
     * @param buyOrderNO  订单编号
     * @return
     */
    List<SubAccountLogVO> exportSubAccountLog(LoginInfo login, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO, String buyOrderNO,String confirmId,String type);

    /**
     * 分账统计-按天统计导出
     *
     * @param login
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param userNO      adaPay商户下的用户id
     * @return
     */
    List<SubAccountLogOverviewVO> exportSubAccountLogOverviewPageByDay(LoginInfo login, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO);

    /**
     * 退款明细导出
     *
     * @param login
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param userNO      adaPay商户下的用户id
     * @param buyOrderNO  订单编号
     * @return
     */
    List<SubAccountUserRefundVO> exportSubAccountUserRefund(LoginInfo login, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO, String buyOrderNO,String confirmId,String type);

    /**
     * 分账统计-总览导出
     *
     * @param login
     * @param accountId   品牌id
     * @param adAccountId 区域id
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param userNO      adaPay商户下的用户id
     * @return
     */
    List<SubAccountLogOverViewExportVO> exportSubAccountLogOverviewPage(LoginInfo login, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO);

    /**
     * 订单收费记录导出
     *
     * @param brandId   品牌id
     * @param accountId 区域id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param type      订单类型
     * @return
     */
    List<RideFeeLog> exportRideFeeLogPage(Integer brandId, Integer accountId, Date startTime, Date endTime, Integer type);

    /**
     * 获取品牌下运营区域id对应的区域名map
     *
     * @param accountId 品牌id
     * @return
     */
    Map<Integer, String> getAreaNameMap(Integer accountId);

    /**
     * 订单收费记录数量
     *
     * @param brandId   品牌id
     * @param accountId 区域id
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param type      订单类型
     * @return
     */
    int selectRideFeeLogCount(Integer brandId, Integer accountId, Date startTime, Date endTime, Integer type);

    /**
     * 分账明细账单下载
     * @param login
     * @param startTime
     * @param endTime
     * @param accountId
     * @param adAccountId
     * @param userNO
     * @param buyOrderNO
     * @return
     */
    String downloadSubAccountLog(LoginInfo login, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO, String buyOrderNO,String confirmId,String type);


    /**
     * 退款明细账单下载
     * @param login
     * @param startTime
     * @param endTime
     * @param accountId
     * @param adAccountId
     * @param userNO
     * @param buyOrderNO
     * @return
     */
    String downloadSubAccountUserRefund(LoginInfo login, Date startTime, Date endTime, Integer accountId, Integer adAccountId, String userNO, String buyOrderNO,String confirmId,String type);




    /**
     * 商户平台总收入
     *
     * @return
     */
    List<Map<String, Object>> queryRideMerchantPlatformRevenue(Integer brandId, List<Integer> accountId, Date startTime, Date endTime, Integer type);

    /**
     * 商户平台总收入
     *
     * @return
     */
    List<Map<String, Object>> queryRideHSBCOperationalRevenue(Integer brandId, List<Integer> accountId, Date startTime, Date endTime, Integer type);

    List<Map<String, Object>> queryRideHuifuRefund(Integer brandId, List<Integer> accountId, Date startTime, Date endTime, Integer type);

    PageResult<LedgerManagementVO> queryLedgerManagement( LoginInfo login,Integer page, Integer size,Integer brandId, List<Integer> accountId, Date startTime, Date endTime, Integer type,String userNO);


    PageResult<LedgerManagementVO> queryLedgerManagementAll( LoginInfo login,Integer page, Integer size,Integer brandId, List<Integer> accountId, Date startTime, Date endTime, Integer type,String userNO);


    /**
     * 单日分账账单下载
     * @param startTime
     * @param endTime
     * @param accountId
     * @param adAccountId
     * @param userNO
     * @return
     */
    String downloadLedgerManagement( String token,Date startTime, Date endTime, Integer accountId, List<Integer> adAccountId, String userNO, Integer type);

    /**
     * 总览分账账单下载
     * @param startTime
     * @param endTime
     * @param accountId
     * @param adAccountId
     * @param userNO
     * @return
     */
    String downloadLedgerManagementAll( String token,Date startTime, Date endTime, Integer accountId, List<Integer> adAccountId, String userNO, Integer type);

    /**
     *
     * 分页查询分账退款详情（新表）
     * @param login 当前登录信息
     * @param page 页码
     * @param size 每页数量
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param brandId 品牌id
     * @param areaId 区域id
     * @param userNO 账户编号
     * @param rechargeNO 业务订单号
     * @param adapayNO 汇付订单号
     * @return 分页详情
     */
    PageResult<RefundAdapayRecordVO> queryRefundAdapayRecord(LoginInfo login, Integer page, Integer size, Date startTime, Date endTime, Integer brandId, Integer areaId, String userNO, String rechargeNO, String adapayNO);


    /**
     * 导出分账退款详情（新表）
     * @param login 当前登录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param brandId 品牌id
     * @param areaId 区域id
     * @param userNO 账户编号
     * @param rechargeNO 业务订单号
     * @param adapayNO 汇付订单号
     * @return 文件名
     */
    String downloadRefundAdapayRecord(LoginInfo login, Date startTime, Date endTime, Integer brandId, Integer areaId, String userNO, String rechargeNO, String adapayNO);
}
